如果說 HITCON CTF team 能打進 DEF CON CTF Final 是因為 217 加入的關係,那 HITCON CTF team 的成立不能不介紹今天要提起的幕後推手 - jeffxx
就跟少年王道漫畫的情節類似,今天要講的故事開始也有兩個主角,一個是功課優秀、才華洋溢的天才優等生,另一個是經常翹課或上課睡覺、考試經常不及格的問題學生,atdog
是當時交大資工的學霸、書卷獎的常客,而 jeffxx
擔任了後者的角色 (沒到前面描述得這麼誇張,前面是誇示漫畫情節 XD),經常在 deadline 之前才跟 atdog 求救,把作業改成自己的版本之後交出去 XD
有趣的是這個乍看之下天差地遠的組合,卻因為相同的興趣而走在一起,先是一同加入交大系計中網管小組 CSCC,後來又成為了 黃世昆 老師 帶領的軟體品質實驗室 (簡稱 SQLab,跟 SQL injection 的 SQL 沒有任何關係) 底下的專題學生,SQLab 是交大在 Security 研究赫赫有名的實驗室,也因為這樣讓 atdog 和 jeffxx 開始走上資安領域這條不歸路 (?)
jeffxx 和 atdog 當時參與的計畫是 <互動式程式線上測試與評審平台>,這個計畫的成果就是赫赫有名 wargame.cs.nctu.edu.tw,當時排行榜上名列前茅的都是資安圈內小有名氣的人物,也經常被推薦成當時資安學習的入門練習,可見網站上的題目具有一定水準,題目許多都是由 jeffxx 所設計,要設計題目作者也要先有一定程度的水平才行,因為投入了大量心思在研究 wargame 上,推測是因為導致 jeffxx 的學業成績相對比較不理想 (?)
可以在排行榜上看到 Orange
XDD Orange 和 jeffxx 可以說是透過 wargame.cs 才認識的,可以說是不打不相識 (?)
wargame.cs 後來用於黃世昆老師開設的程式安全等課程上,由於該平台會針對註冊會員產生不同的 flag,可以一定程度遏止 share flag 的惡習
現在 CTF team 的成員 seanwu, lays, lucas 等人都有挑戰過 wargame.cs,解出了除了壞掉的 openssl 以外的所有題目...XD
後來 wargame.cs.nctu.edu.tw 因為硬碟壞軌停止營運了一段時間,後來由實體機轉移到 VMWare 中運行苟延殘喘了一陣子,後來因為沒有人願意接手維運,最後就忍痛關站 QQ
BTW,當時其實 wargame 網站非常多,wargame.cs 也不是台灣的第一個,目前能往前追朔到,最早的應該是 台灣冒險家俱樂部,不知道還有沒有更早出現的 XD
目前台灣學習 pwning 最好的網站是 https://pwnable.tw,對 pwn 有興趣的看官們可以嘗試看看
後來 jeffxx 吸收了 wargame.cs 的成功和失敗之處,在程式安全的期末考嘗試舉辦 CTF 的台交賽,最後衍生呈現在 2015 年 HITCON CTF Final 的初始平台,不得不說 HITCON CTF 能有現在的成績,jeffxx 是在後面最重要的人物之一
SQLab 成員有每年參加 HITCON 吸取新知的習慣,jeffxx 也不例外,參加之後嘗試挑戰 HITCON Wargame,於 2010 年獲得了第 7 名的成績,隔年 2011 進步到第三名,但 2010 和 2011 的冠軍都被交大 DSNS Lab 給拿下,隔年 2012 正式成立隊伍 CRAX
挑戰 HITCON wargame,終於獲得第一名的成績 XD
software CRash analysis for Automatic eXploit generation
的縮寫,是基於 SQLab 核心的研究項目 symbolic exection 技術衍伸的自動化 exploit 產生器這應該是 CRAX 這個名詞第一次出現在大眾眼前,並且在首次出現就獲得第一名的成績 XD 隔年 2013 也獲得冠軍,然後就接手舉辦 HITCON CTF ...... QQ 當時有人疑問為什麼交大怎麼多出一隊 CRAX,還問是不是有八卦......XD 其實就只是不同 Lab 各自挑戰而已,沒有八卦 (?)
後來就如前面的故事所述,在 Orange, jeffxx, seanwu 等人的牽線之下,集合當時台灣最強戰力 Orange + 217 + CRAX 挑戰並成功打進 DEF CON CTF Final 之後,隔年其餘部分成員要畢業投入職場,剩下的成員 (jeffxx, atdog, ddaa) 與 DSNS (bletchley) 聯合成立 BambooFox,目前呈現一個單飛不解散的狀態......(?)
HITCON CTF Team 成員有以下也是 CRAX 的成員:
一個團隊最重要的就是凝聚力,而最能把大家凝聚在一起的東西就是 食物,因此 HITCON CTF Team 往往會在 CTF 結束之後舉辦 大食團 (Orange: 感謝 jeffxx 賜與我美好的一餐),但大食團只能在結束時凝聚團隊意識,但我們需要能在 CTF 進行中提升大家的戰鬥力,因此我們需要新的職業出現 - 廚師
......可惜不是 Alan,是我們本文的主角 jeffxx,經過有如遠月集訓般刻苦修練後,jeffxx 已經精通 steak overflow 的技能,讓大家在一面於 CTF 奮戰之際,在需要補充能量時吃到最美味的食物,以便大家更高效率的解出 flag
以下提供 jeffxx 今天在 HITCON CTF 後勤團隊準備的晚餐,深夜時段請斟酌觀看:
這題在我接手 wargame.cs 之前,有壞掉好一陣子過......XD 當時還沒有 docker 這種好東西可以使用,這題環境我記得是要透過在題目主機上透過 chroot 跑一個 maple BBS 起來......,但隨著題目主機 FreeBSD 升級之後,chroot 的功能也就噴掉了 G__G
先來回顧一下這題的題目敘述:
按下start 後, 將會在特定 IP 與 port (詳見 start 之後取得之資訊)開啟 bbs 服務
ITOC maple bbs 曾經存在有一嚴重漏洞可讓使用者執行任意程式
請用 guest 登入此 bbs 並找出漏洞, 利用此漏洞執行 /checkin 獲得通關金鑰
在 /home/wargame/bbs 有 bbs 的部份程式碼
雖然題目說是 部分程式碼,但其實給了一大包 maple BBS 的外部功能......QQ 像是寄信到其他 BBS 站、小遊戲 之類的,不太可能每行程式碼都看一遍 XD 這邊必須先從敘述的 可讓使用者執行任意程式
猜到這題是考 cmd injection 才有辦法繼續往下做,再檢查過所有呼叫 system
的程式碼之後,可以發現 game/cdict.c
在實作查詢線上字典的功能時,存在 cmd injection 的問題,程式碼如下:
void
main_cdict()
{
char word[32], fpath[50], cmd[256];
while (vget(b_lines, 0, "請輸入想查詢的中/英文(可用 Regular Expression):", word, 30, DOECHO))
{
if (strchr(word, '\''))
continue;
if (strchr(word, '\"'))
continue;
if (strchr(word, '`'))
continue;
if (strchr(word, ';'))
continue;
if (strchr(word, '|'))
continue;
if (strchr(word, '$'))
continue;
if (word[strlen(word) - 1] == '\\')
strcat(word, "\\");
sprintf(fpath, "tmp/%s-%d.21cent", cuser.userid, (int)getpid());
sprintf(cmd, "%-24s\033[1;37;44m 21st Century Dictionary 線上字典 \033[m\n%s", "", MSG_SEPERATOR);
f_cat(fpath, cmd);
sprintf(cmd, "cdict5 %s >> %s", word, fpath);
system(cmd);
more(fpath, NULL);
unlink(fpath);
}
}
雖然有對要查詢的單字用黑名單過濾了一些常見的 cmd injection 字元 ', ", ``, ;, | ,$
,但顯然有漏,可以讓我們截斷前面的 cdict5
, 隨便舉幾種方式:
apple && cat flag
透過 &&
截斷,但前面指令執行成功之後才會執行我們插入的 command
\ncat flag
透過換行來截斷前面的 command,要 input 能接收換行字元才能使用,這題用 vget 應該可以...吧 XD
<(cat flag)
這招要 bash 才能使用,原理跟 cat flag
一樣,不過預設 shell 是 sh
應該無法在這題使用
話說回來,看標題有 [Real]
這應該是 maple BBS 上曾經真實存在過的問題 (?) 但我翻了一下目前 iotc bbs 可取得的 source code 找不到 game/cdict.c
,只有發現 dictd.c
,看來這題是當年某個站自己改出來的漏洞吧 (?)
學長太神了< _ _ >
一想到自己只會一點點pwn,就覺得讓SQLab的名字蒙羞了
pwnable.tw好玩XDDD
用蒙羞太誇張了啦...XD
我也只是剛好有 jeffxx 帶著入門,不然憑我自己可能也玩不出什麼成就 QQ 沒有成功傳承下去實在抱歉,不過有以後有要幫忙可以聯繫我們,lab 的 FB 社團應該大家都會看 XD